package com.rj.ability.leqi.adapter.domain.aisino;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.rj.ability.leqi.req.*;
import io.github.linpeilie.annotations.AutoMapper;
import io.github.linpeilie.annotations.AutoMappers;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import java.util.Date;
import java.util.List;

/**
 * .数电票上传
 *
 * @author YFX_RANLUBO
 * @date 2024/04/30 15:42
 **/
@Data
@AutoMappers({
    @AutoMapper(target = QdfpscOfBaseReq.class, reverseConvertGenerate = false),
    @AutoMapper(target = AisinoQdfpscRes.class, reverseConvertGenerate = false),
    @AutoMapper(target = QdfpscOfBdcReq.class, reverseConvertGenerate = false),
    @AutoMapper(target = QdfpscOfHwysReq.class, reverseConvertGenerate = false),
    @AutoMapper(target = QdfpscOfJzfwReq.class, reverseConvertGenerate = false),
    @AutoMapper(target = QdfpscOfBdcSellReq.class, reverseConvertGenerate = false),
    @AutoMapper(target = QdfpscOfLkysReq.class, reverseConvertGenerate = false),
    @AutoMapper(target = QdfpscOfDsccsReq.class, reverseConvertGenerate = false)
})
public class AisinoQdfpscReq {
    /**
     * 业务类型	2	否	企业自定义
     */
    @Length(max = 2)
    private String businessType;
    /**
     * 订单号	32	否	企业自定义
     */
    @Length(max = 32)
    private String orderNum;
    /**
     * 订单渠道	2	否	企业自定义
     */
    @Length(max = 2)
    private String orderChannel;
    /**
     * 订单日期	19	否	yyyy-MM-dd HH:mm:s
     */
    private Date orderDate;
    /**
     * 交付方式途径	2	否	交付方式取值：
     * 0或空不交付；
     * 1邮箱；
     * 2短信；
     * 3微信插卡包-deleted；
     * 5定制。
     */
    private String requestType = "0";
    /**
     * 含税标志	1	是	0 不含税  1 含税
     * 用于标识该笔开票订单内商品是含税价还是不含税价。
     * 标志为1：请求报文中所有明细行金额、明细行单价、合计金额都必须为含税价。
     * 标志为0：请求报文中所有明细行金额、明细行单价、合计金额都必须为不含税价。
     */
    private String taxMark;
    /**
     * 购买方邮箱	50	条件必传	交付方式 1邮箱：必传。
     */
    private String buyerEmail;

    /**
     * 购买方微信	100	条件必传	交付方式
     * 3微信卡包：必传。
     */
    private String buyerWeChat;
    /**
     * 购买方会员号	32	否
     */
    private String buyerMemberId;

    /**
     * 购方基本信息
     */
    private BuyerInfo buyerInfo;

    /**
     * 销方基本信息
     */
    private SellerInfo sellerInfo;
    /**
     * 开票明细
     */
    private InvoiceProductList invoiceProductList;
    /**
     * 差额开票凭证明细
     */
    private DeductionList deductionList;
    /**
     * 扣除额	16,2	否
     * 征税类型代码
     * 差额征税-全额开票：0；
     * 差额征税-差额开票：0<扣除额 <=含税金额。
     * 明细行只能是一行。
     * 1.具体差额征税发票的计算方法如下：
     * 1.1不含税差额 = 不含税金额 - 扣除额；税额 = 不含税差额*税率。
     * 扣除额不能大于不含税金额。
     */
    private String deduction;

    /**
     * 原发票代码	12	否
     */
    private String originalInvoiceCode;
    /**
     * 原开票日期	14	否条件必传	YYYYMMDDHHMMSS
     * 原发票号码和原发票日期应同时为空或同时不为空
     */
    @JsonFormat(pattern = "yyyyMMddHHmmss", timezone = "GMT+8")
    private Date originalIssueDate;

    /**
     * 蓝字发票标志  varchar  1  是  0：蓝字发票 1：红字发票
     * Aisino:开票类型
     */
    @JsonProperty("typeCode")
    private String lzfpbz;
    /**
     * 发票票种  varchar  2  是  01：数电专 02：数电普
     * Aisino:开票票种  081 数字化电子专票 082 数字化电子普票
     */
    @JsonProperty("invoiceTypeCode")
    private String fppz;
    /**
     * 特定要素  varchar  2  否  空：非特定要素
     * aisino:“00”非特定要素
     */
    @JsonProperty("specialInvoiceMark")
    private String tdys = "00";
    /**
     * 差额征税类型代码varchar  2  否 空：非差额发票 01：全额开票 02：差额开票
     * aisino:征税类型代码 0：普通征税  2：差额征税—差额开票 3：差额征税—全额开票
     */
    @JsonProperty("taxInclusivePriceMark")
    private String cezslxDm = "0";
    /**
     * 出口业务适用政策代码varchar  2  否  00|空：非出口业务01：退税政策02：免税政策03：征税政策
     */
    @JsonProperty("exportPoliciesCode")
    private String ckywsyzcDm = "00";
    /**
     * 增值税即征即退代码varchar  2  否
     * 00|空：非增值税即征即退01：软件产品发票02：资源综合利用产品发票03：管道运输服务发票
     * 04：有形动产融资租赁服务05：有形动产融资性售后回租服务发票06：新型墙体材料发票
     * 07：风力发电产品发票08：光伏发电89产品发票09：动漫软件产品发票
     * 10：飞机维修劳务发票11：黄金发票12：铂金发票
     */
    @JsonProperty("immediateVATRefundCode")
    private String zzsjzjtDm = "00";
    /**
     * 购买方经办人联系电话varchar  60  否
     * aisino:      * 购买方手机	20	条件必传	交付方式,  2短信：必传。
     */
    @JsonProperty("buyerMobileNum")
    private String gmfjbrlxdh;
    /**
     * 合计金额  number  18,2  是
     * aisino: taxMark含税标志   0不含税：必传；1含税：不传，自动计算
     */
    @JsonProperty("taxExclusiveTotalAmount")
    private String hjje;
    /**
     * 合计税额  number  18,2  是
     * aisino: taxMark含税标志      * 0不含税：必传；1含税：不传，自动计算
     */
    @JsonProperty("taxTotalAmount")
    private String hjse;
    /**
     * 价税合计  number  18,2  是
     */
    @JsonProperty("taxInclusiveTotalAmount")
    private String jshj;
    /**
     * 开票人  varchar  300  是
     */
    @JsonProperty("invoiceClerk")
    private String kpr;
    /**
     * 开票人证件号码  varchar  30  否
     */
    @JsonProperty("iDCardnumber")
    private String kprzjhm;
    /**
     * 开票人证件类型  varchar  4  否
     * 100：单位101：组织机构代码证102：营业执照103：税务登记证
     * 199：其他单位证件200：个人201：居民身份证202：军官证
     * 203：武警警官证204：士兵证205：军队离退休干部证206：残疾人证
     * 207：残疾军人证（1-8  级）208：外国护照209：港澳同胞回乡证
     * 210：港澳居民来往内地通行证211：台胞证212：中华人民共和国往来港澳通行证
     * 213：台湾居民来往大陆通行证214：大陆居民往来台湾通行证215：外国人居留证
     * 216：外交官证217：使（领事）馆证218：海员证219：香港永久性居民身份证
     * 220：台湾身份证221：澳门特别行政区永久性居民身份证222：外国人身份证件
     * 223：高校毕业生自主创业证224：就业失业登记证225：退休证220：离休证
     * 227：中国护照228：城镇退役士兵自谋职业证229：随军家属身份证明
     * 230：中国人民解放军军官转业证书231：中国人民解放军义务兵退出现役证
     * 232：中国人民解放军士官退出现役证233：外国人永久居留身份证（外国人永久居留证）
     * 234：就业创业证235：香港特别行政区护照9192236：澳门特别行政区护照
     * 237：中华人民共和国港澳居民居住证238：中华人民共和国台湾居民居住证
     * 239：《中华人民共和国外国人  工  作  许  可证》（A  类）
     * 240：《中华人民共和国外国人  工  作  许  可证》（B  类）
     * 241：《中华人民共和国外国人  工  作  许  可证》（C  类）
     * 291：出生医学证明299：其他个人证件
     */
    @JsonProperty("iDCardtype")
    private String kprzjlx;
    /**
     * 对应蓝字发票号码varchar  20  否
     * 是否蓝字发票标志为  1  时，此节点有内容红票开具时必传；如果红冲的是税控发票，对应蓝字发票号码的填写规则为税控发票的发票代码+发票号码。
     */
    @JsonProperty("originalInvoiceNo")
    private String dylzfphm;
    /**
     * 红字确认信息单编号varchar  20  否
     * 是否蓝字发票标志为  1  时，此节点有内容红票开具时必传
     */
    @JsonProperty("infoFormNum")
    private String hzqrxxdbh;
    /**
     * 红字确认单uuid varchar  32  否 是否蓝字发票标志为  1  时，
     * 此节点有内容红票开具时必传
     */
    @JsonProperty("applicationFormCode")
    private String hzqrduuid;
    /**
     * 备注  varchar  450  否
     */
    @JsonProperty("note")
    private String bz;

    /**
     * 是否展示销售方银行账号标签varchar  1  否 Y:展示 N:不展示
     */
    @JsonProperty("displaySellerFinancialAccount")
    private String sfzsxsfyhzhbq = "N";
    /**
     * 是否展示购买方银行账号标签varchar  1  否 Y:展示 N:不展示
     */
    @JsonProperty("displayBuyerFinancialAccount")
    private String sfzsgmfyhzhbq = "N";
    /**
     * 收款人姓名  varchar  150  否
     */
    @JsonProperty("payee")
    private String skrxm;
    /**
     * 复核人姓名  varchar  75  否
     */
    @JsonProperty("checker")
    private String fhrxm;
    /**
     * 区域代码  varchar  20  是
     *//*
    private String qyDm;
    *//**
     * 附加要素
     *//*
    List<FjysData> fjysList;
    *//**
     * 收购发票类型代码varchar  2  否空：非收购发票01：农产品收购发票02：光伏收购发票03：二手车收购发票
     *//*
    private String sgfplxDm;
    *//**
     * 服务器地址  varchar  20  是需自行采集开票申请设备
     *//*
    private String ip;
    *//**
     * mac  地址  char  20  是需自行采集开票申请设备
     *//*
    private String macdz;
    *//**
     * CPU  序列号  char  20  否
     *//*
    private String cpuid;
    *//**
     * 主板序列号  varchar  20  否
     *//*
    private String zbxlh;
    *//**
     * 收款银行名称  varchar  120  否
     *//*
    private String skyhmc;
    *//**
     * 收款银行账号  varchar  100  否
     *//*
    private String skyhzh;
    *//**
     * 结算方式  varchar  2  否01：现金02：银行转账03：票据9004：第三方支付05：预付卡99：其他
     *//*
    private String jsfs;
    *//**
     * 应税行为发生地  varchar  11  否
     *//*
    private String ysxwfsd;

    *//**
     * 购买方经办人姓名varchar  150  否
     *//*
    private String gmfjbr;
    *//**
     * 购买方经办人证件号码varchar  30  否
     *//*
    private String jbrsfzjhm;
    */
    /**
     * 发票号码  varchar  20  是
     * private String fphm;
     */
    @JsonIgnore
    private String fphm;
    /**
     * 开票日期  datetime  是格式：yyyy-MM-dd HH:mm:ss
     */
    @JsonIgnore
    private String kprq;
    /**
     * 是否已上传到税局
     */
    @JsonIgnore
    private boolean updload;
    /**
     * 是否已上传到税局流水号
     */
    @JsonIgnore
    private String sllsh;
    /**
     * 平台编号  varchar  20  是  直连单位  ID
     *//*
    private String ptbh;*/

    /**
     * 特殊行业特定要素
     */
    private AisinoSpecificElements specificElements;

    /**
     * 特殊行业特定要素
     */
    private List<FjysData> additionalList;
}
